package max;

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * @author CaoYu
 * @date 2021年4月13日
 * @description
 */
public class Algorithm {

	/**
	 * 在控制台打印数组
	 *
	 * @param array
	 */
	public static void printArray(int[] array) {
		if (array == null)
			return;
		for (int i : array) {
			System.out.print(i + ",");
		}
		System.out.println("");
	}

	/**
	 * 打印数组，数组前带说明
	 *
	 * @param des
	 * @param array
	 */
	public static void printArray(String des, int[] array) {
		if (array == null)
			return;
		System.out.print(des + " : ");
		for (int i : array) {
			System.out.print(i + ",");
		}
		System.out.println("");
	}

	/**
	 * 创建一个随机int 数组[0..range)
	 *
	 * @param size
	 * @param range
	 * @return
	 */
	public static int[] createRandomArray(int size, int range) {
		int[] array = new int[size];
		for (int i = 0; i < size; i++) {
			array[i] = (int) (Math.random() * range);
		}
		return array;
	}

	public static void time(int[] array,Consumer<int[]> consumer) {
		long startTime = System.nanoTime();// 获取开始时间.nanoTime();
		long startTime1 = System.currentTimeMillis();// 获取开始时间.nanoTime();
		consumer.accept(array);
		long endTime = System.nanoTime(); // 获取结束时间
		long endTime1 = System.currentTimeMillis(); // 获取结束时间
		System.out.println("运行时间： " + (endTime - startTime) + "ns ");
		System.out.println("运行时间： " + (endTime1 - startTime1) + "ms");
	}

	public static void time(String name ,Supplier consumer) {
		long startTime = System.nanoTime();// 获取开始时间.nanoTime();
		long startTime1 = System.currentTimeMillis();// 获取开始时间.nanoTime();
		consumer.get();
		long endTime = System.nanoTime(); // 获取结束时间
		long endTime1 = System.currentTimeMillis(); // 获取结束时间
		System.out.println(name + "： " + (endTime - startTime) + "ns ");
		System.out.println(name + "： " + (endTime1 - startTime1) + "ms");
	}


	public static void time(String name ,Consumer<List> consumer,List list) {
		long startTime = System.nanoTime();// 获取开始时间.nanoTime();
		long startTime1 = System.currentTimeMillis();// 获取开始时间.nanoTime();
		consumer.accept(list);
		long endTime = System.nanoTime(); // 获取结束时间
		long endTime1 = System.currentTimeMillis(); // 获取结束时间
		System.out.println(name + "： " + (endTime - startTime) + "ns ");
		System.out.println(name + "： " + (endTime1 - startTime1) + "ms");
	}

}
